package waimai;

import lombok.Data;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/**
 * @author chenqing.chang
 * @date 2025/1/24
 */
@Data
public class TTSReqDto {
    /**
     * 原始nlu数据
     */
    private NluResp nluRespOriginal;

    /**
     * OEM用户Id
     */
    private String userId;

    /**
     * 用户输入
     */
    private String query;
    /**
     * 询问场景
     */
    private String askType;

    /**
     * 待确认的地址
     */
    private MatchAddress addressConfirm;

    /**
     * 用户待选择的列表
     */
    private List<MatchAddress> toBeSelectAddress;

    /**
     * 匹配到的地址
     */
    private MatchAddress matchAddress;

    /**
     * 匹配的店铺信息
     */
    private MatchStore storeInfo;

    /**
     * 当前推荐的商品，用还没确认
     */
    private MatchItem recommendItem;

    /**
     * 用户已经确认选择的商品，类似购物车
     */
    private List<MatchItem> shoppingCart;
    /**
     * 订单确认信息
     */
    private OrderConfirm orderConfirm;

    /**
     * 数量修改结果
     */
    private CountChangeResult countChangeResult;

    /**
     * 规格修改结果
     */
    private ChangeSpecResult changeSpecResult;

    /**
     * 商品移除结果
     */
    private ItemRemoveResult itemRemoveResult;

    /**
     * 购物车校验失败信息
     */
    private ShopCartValidateFailed shopCartValidateFailed;

    /**
     * 下单失败原因
     */
    private OrderFailed orderFailed;

    @Data
    public static class MatchItem {
        /**
         * 商品来源
         * 0:搜索推荐
         * 1:历史推荐
         */
        private int itemSource;

        /**
         * 商品类型
         * 0.推荐商品
         * 1.凑单商品-推荐的凑单商品
         * 2.必选品-推荐的必选品
         */
        private int itemType;

        private String itemName;

        /**
         * 最少购买数量
         */
        private int minPurchase = 1;

        /**
         * 用户购买数量
         */
        private int buyCount = 1;

        /**
         * 匹配规格
         */
        private List<MatchAttribute> matchAttributes;
    }

    @Data
    public static class MatchAttribute {
        private String attributeName;
        private String attributeValue;
    }

    @Data
    public static class MatchAddress {
        private String address;
        private String addressDetail;
        private String addressTag;
        private String phone;
        private String receiveUserName;
    }

    @Data
    public static class MatchStore {
        private String storeName;
        private Double deliveryFee;
        /**
         * 配送时长，单位分钟
         */
        private Integer orderLeadTime;
    }

    @Data
    public static class OrderConfirm {
        /**
         * 预计算达时间-时间戳
         */
        private Long deliverTime;
        /**
         * 实付金额
         */
        private Double totalAmount;
        /**
         * 优惠金额-为空没有优惠
         */
        private Double discountAmount;
    }

    /**
     * 数量修改结果
     */
    @Data
    public static class CountChangeResult {
        /**
         * 没有匹配到的商品名称
         */
        private List<String> notFoundItems;

        /**
         * 已经修改成功的商品名称
         * key->productName value->数量
         */
        Map<String, Integer> changedItems;
    }

    /**
     * 规格修改结果
     */
    @Data
    public static class ChangeSpecResult {
        /**
         * 没有找到的商品
         */
        private List<String> notFoundItems;

        /**
         * 没有规格的商品
         */
        List<String> noSpecItems;

        /**
         * 没有指明修改规格的商品
         */
        List<String> notInputSpecItems;

        /**
         * 已经修改成功的商品
         * key->itemName value->规格名称
         */
        private Map<String, List<String>> changedItems;
        /**
         * 没有找到对应规格的商品
         * key->itemName value->规格名称
         */
        private Map<String, List<String>> specNotFoundItems;
    }

    /**
     * 商品移除结果
     */
    @Data
    public static class ItemRemoveResult{
        // 没有匹配到的商品名称
        List<String> notFoundItems = new ArrayList<>();
        // 匹配到的要移除的商品名称
        List<String> removeItemNames = new ArrayList<>();
    }

    /**
     * 购物车校验失败结果
     */
    @Data
    public static class ShopCartValidateFailed{
        /**
         * 1. 不满起送价
         * 2. 缺少必选品
         */
        private int errorType;
        /**
         * 如果不满起送价此值不为空
         */
        private Double collectPrice;
    }


    /**
     * 购物车校验失败结果
     */
    @Data
    public static class ShopCartValidateResult{
        /**
         * 1. 不满起送价
         * 2. 缺少必选品
         */
        private int errorType;
        /**
         * 如果不满起送价此值不为空
         */
        private Double collectPrice;
    }

    /**
     * 下单失败原因
     */
    @Data
    public static class OrderFailed{
        /**
         * 失败原因
         */
        private int errorMsg;
    }


}